package component

import (
	"github.com/golang-jwt/jwt"
	"time"
)

type Claims struct {
	Id       int    `json:"id"`
	Username string `json:"username"`
	jwt.StandardClaims
}

// GenToken 定义加密秘钥
// id:用户id
// username:用户名称
// exp:过期时间（分钟）
// issuer:签发人
// key:密匙
func GenToken(id int, username string, exp int64, issuer string, key string) (string, error) {
	// 使用HS256加密方式
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, Claims{
		Id:       id,
		Username: username,
		StandardClaims: jwt.StandardClaims{
			ExpiresAt: time.Now().Add(time.Duration(exp) * time.Minute).Unix(), //过期时间
			Issuer:    issuer,
		},
	})
	signToken, err := token.SignedString([]byte(key))
	if err != nil {
		return "", err
	}
	return signToken, nil

}

func ParserToken(signToken string, key string) (*Claims, error) {
	var claims Claims
	token, err := jwt.ParseWithClaims(signToken, &claims, func(token *jwt.Token) (interface{}, error) {
		return []byte(key), nil
	})
	if token.Valid {
		return &claims, nil
	} else {
		return nil, err
	}
}
